home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / encoders / Pex.pm < prev    next >
Text File  |  2006-06-30  |  2KB  |  61 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Encoder::Pex;
  11. use strict;
  12. use base 'Msf::Encoder::XorDword';
  13. use Pex::Encoder;
  14. use Pex::x86;
  15.  
  16. my $advanced = {
  17. };
  18.  
  19. my $info = {
  20.   'Name'    => 'Pex Call $+4 Double Word Xor Encoder',
  21.   'Version' => '$Revision: 1.20 $',
  22.   'Authors' =>
  23.     [
  24.       'H D Moore <hdm [at] metasploit.com>',
  25.       'spoonm <ninjatools [at] hush.com>',
  26.     ],
  27.   'Arch'    => [ 'x86' ],
  28.   'OS'      => [ ],
  29.   'Description'  =>  'Dynamically generated dword xor encoder',
  30.   'Refs'    => [ ],
  31. };
  32.  
  33. sub new {
  34.   my $class = shift; 
  35.   return($class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_));
  36. }
  37.  
  38. # Variable Length Decoder Using jmp/call 26/29 bytes.
  39. # Uses smaller encoder if payload is <= 512 bytes
  40. sub _GenEncoder {
  41.   my $self = shift;
  42.   my $xor = shift;
  43.   my $len = shift;
  44.   my $badchars = shift;
  45.   my $xorkey = pack('V', $xor);
  46.  
  47.   # spoon's smaller variable-length encoder (updated to use call $+4 by vlad902)
  48.   my $decoder =
  49.     Pex::x86::Sub(-((($len -1) / 4) + 1), "ecx", $badchars).
  50.     "\xe8\xff\xff\xff".            # call $+4
  51.     "\xff\xc0".                # inc eax
  52.     "\x5e".                # pop esi
  53.     "\x81\x76\x0e" . $xorkey.        # xor_xor: xor [esi + 0x0e], $xorkey 
  54.     "\x83\xee\xfc".            # sub esi, -4
  55.     "\xe2\xf4";                # loop xor_xor
  56.     
  57.   return($decoder);
  58. }
  59.  
  60. 1;
  61.